import router, { asyncRoutes } from './router' // 导入路由
import 'nprogress/nprogress.css'
import store from './store'
import nProgress from 'nprogress'

const whiteList = ['/login', '/404']

// 前置守卫- 路由跳转之前会进入

router.beforeEach(async(to, from, next) => {
  // to 到哪里去
  // from 从哪里来
  // next - 必须执行的函数 - 不执行页面会被卡主 promise状态
  // next（） 放过通行 Login =>dashbord =>顺利通过
  // next（false）终止跳转 => login => 留在login
  // next(地址) 转发地址 next("/test") login => dashboard => 跳到test
  // 不论什么场景下 next必须执行 否则就会页面空白
  nProgress.start()// 开启进度条
  if (store.getters.token) {
    if (to.path === '/login') {
      next('/')
      nProgress.done()
    } else {
      if (!store.getters.userId) {
        // 获取用户资料
        // await store.dispatch('user/getUserInfo')// 异步请求
        const { roles } = await store.dispatch('user/getUserInfo')
        // roles - menus
        console.log(roles.menus) // 当前用户角色所拥有的权限点 - 8个动态路由
        //  asyncRoutes // 8个动态路由
        // menus: ["approval"]
        // [{ name:'approval' }]
        const newRoutes = asyncRoutes.filter(item => {
          return roles.menus.includes(item.name)
        })
        store.commit('user/setRoutes', newRoutes)
        // 添加到路由上
        router.addRoutes([...newRoutes, { path: '*', redirect: '/404', hidden: true }]) // 将动态路由添加到当前路由上
        // 异步操作 需要添加完路由之后 再中转一下
        // console.log(newRoutes)
        next(to.path) // 中转到要去的地址
        nProgress.done() // 关闭进度条
      } else {
        next()
      }
    }
  } else {
    if (whiteList.includes(to.path)) {
      next()
    } else {
      next('/login')
      nProgress.done()
    }
  }
})

// 后置守卫 - 路由跳转完成进入

router.afterEach(() => {
  nProgress.done() // 关闭进度条
})
